package com.rui.shangXueTang.tree;

/**
 * @author : [锐神NO.3]
 * @version : [v1.0]
 * @className : BinaryTree
 * @createTime : [2022/2/16 22:01]
 * @description : [二叉树]
 */

public class BinaryTree {

    private Node root;

    public void setRoot(Node root) {
        this.root = root;
    }

    /**
     * 前序遍历
     */
    public void preSelect() {
        if(this.root != null){
            this.root.preSelect();
        }else {
            System.out.println("空二叉树,无法遍历");
        }
    }

    /**
     * 中序遍历
     */
    public void midSelect() {
        if(this.root != null){
            this.root.midSelect();
        }else {
            System.out.println("空二叉树,无法遍历");
        }
    }

    /**
     * 后序遍历
     */
    public void backSelect() {
        if(this.root != null){
            this.root.backSelect();
        }else {
            System.out.println("空二叉树,无法遍历");
        }
    }

    /**
     * 根据节点编号前序查询
     */
    public Node preSearch(int no) {
        if(root != null){
            return root.preSearch(no);
        }else {
            System.out.println("空二叉树,无法遍历");
            return null;
        }
    }

    /**
     * 根据节点编号中序查询
     */
    public Node midSearch(int no){
        if(root != null){
            return root.midSearch(no);
        }else {
            System.out.println("空二叉树,无法遍历");
            return null;
        }
    }

    /**
     * 根据节点编号后序查询
     */
    public Node backSearch(int no){
        if(root != null){
            return root.backSearch(no);
        }else {
            System.out.println("空二叉树,无法遍历");
            return null;
        }
    }

    /**
     * 删除节点
     */
    public void delNode(int no){
        if(root != null){
            if(root.getNo() == no){
                root = null;
            }else {
                root.delNode(no);
            }
        }else {
            System.out.println("二叉树为空,无法删除");
        }
    }
}
